﻿using System;
using System.Collections.Generic;
using System.Text;
using Entidad;
using System.Data;
using Persistencias;

namespace Persistencia
{
    public class PerMensualidad : IPersistencia
    {
        public PerMensualidad() { }

        public void Insertar(IEntidad entidad)
        {
            AccesoaDatos d = new AccesoaDatos();

            try
            {
                EntAlumno Alumno = (EntAlumno)entidad;
                d.CrearParametro("@IdAlumno", Alumno.IdAlumno, SqlDbType.Int);
                d.EjecutaSentencia("InsertarMensualidad");

            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public void Eliminar(int Id)
        {
            try
            {
                AccesoaDatos d = new AccesoaDatos();

                d.CrearParametro("@IdMensualidad", Id, SqlDbType.Int);
                d.EjecutaSentencia("sp_DeleteMensualidad");


            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public void Modificar(IEntidad entidad)
        {
            AccesoaDatos d = new AccesoaDatos();
            try
            {
                EntMensualidad Mensualidad = (EntMensualidad)entidad;

                d.CrearParametro("@nombre", Mensualidad.Alumno.IdAlumno, SqlDbType.Int);
                d.CrearParametro("@FechaMensualidad", Mensualidad.FechaMensualidad, SqlDbType.DateTime);
                d.CrearParametro("@FechaPago", Mensualidad.FechaPago, SqlDbType.DateTime);
                d.CrearParametro("@IdMensualidad", Mensualidad.IdMensualidad, SqlDbType.Int);
                d.CrearParametro("@Monto", Mensualidad.Monto.IdMonto, SqlDbType.Int);
                d.CrearParametro("@PagoTotalRealizado", Mensualidad.PagoTotalRealizado, SqlDbType.Money);
                d.CrearParametro("@IdUsuarioSist", Mensualidad.UsuarioSist.IdUsuarioSist, SqlDbType.Int);
                
                d.EjecutaSentencia("sp_ModificarMensualidad");

            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public IEntidad Obtener(String NombreLogin)
        {
            throw new NotImplementedException();
        }

        public List<IEntidad> ObtenerPagosPorAlumno(String IdAlumno)
        {
            try
            {
                List<IEntidad> DatosMensualidad = new List<IEntidad>();
                AccesoaDatos d = new AccesoaDatos();

                d.CrearParametro("@IdAlumno", IdAlumno, SqlDbType.Int);
                DataTable _tabla = d.EjecutaSelect("ObtenerPagosPorAlumno");

                foreach (DataRow _row in _tabla.Rows)
                {
                    EntMensualidad Mensualidad = new EntMensualidad();
                    PerMonto perMonto = new PerMonto();
                    PerAlumno perAlumno = new PerAlumno();
                    Mensualidad.IdMensualidad = Convert.ToInt32(_row["IdMensualidad"]);
                    Mensualidad.FechaMensualidad = Convert.ToDateTime(_row["FechaMensualidad"]);
                    Mensualidad.Monto = perMonto.ObtenerMonto();
                    Mensualidad.Alumno = (EntAlumno)perAlumno.Obtener(IdAlumno);
                    if (_row["FechadePago"].ToString() != "")
                    Mensualidad.FechaPago = Convert.ToDateTime(_row["FechadePago"]);
                    if (_row["PagoTotalRealizado"].ToString() != "")
                    Mensualidad.PagoTotalRealizado = Convert.ToDecimal(_row["PagoTotalRealizado"]);
                    if (_row["NombreCobrador"].ToString() != "")
                    Mensualidad.UsuarioSist.NombreCobrador = _row["NombreCobrador"].ToString();
                    Mensualidad.Concepto = _row["Concepto"].ToString();

                    if (_row["MontoPag"].ToString() != "")
                        Mensualidad.MontoPag = _row["MontoPag"].ToString();
                  
                    if (_row["BecaPag"].ToString() != "")
                        Mensualidad.BecaPag = _row["BecaPag"].ToString();
                   
                    if (_row["RecargoPag"].ToString() != "")
                        Mensualidad.RecargoPag = _row["RecargoPag"].ToString();


                    if (_row["PagoOportunoPag"].ToString() != "")
                        Mensualidad.PagoOportunoPag = _row["PagoOportunoPag"].ToString();


                    DatosMensualidad.Add(Mensualidad);

                }
                return DatosMensualidad;
            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public List<IEntidad> ObtenerTodos()
        {
            try
            {

                AccesoaDatos d = new AccesoaDatos();
                List<IEntidad> DatosMensualidad = new List<IEntidad>();
                DataTable _tabla = d.EjecutaSelect("sp_ObtenerTodosMensualidad");
                foreach (DataRow _row in _tabla.Rows)
                {
                    PerMonto perMonto = new PerMonto();
                    EntMensualidad Mensualidad = new EntMensualidad();
                    PerUsuarioSist Usuario = new PerUsuarioSist();
                    Mensualidad.IdMensualidad = Convert.ToInt32(_row["IdNombre"]);
                    Mensualidad.Alumno.IdAlumno = Convert.ToInt32(_row["Nombre"]);
                    Mensualidad.FechaMensualidad = Convert.ToDateTime(_row["FechaDeNacimiento"]);
                    Mensualidad.FechaPago = Convert.ToDateTime(_row["Direccion"]);
                    
                    Mensualidad.PagoTotalRealizado =Convert.ToDecimal(_row["NombrePadre"]);
                    Mensualidad.UsuarioSist = (EntUsuarioSist)Usuario.Obtener(_row["Categoria"].ToString());
                   
                    DatosMensualidad.Add(Mensualidad);
                }
                return DatosMensualidad;
            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

       

        public void InsertarInscripcion(EntAlumno entAlumno, bool p)
        {
            AccesoaDatos d = new AccesoaDatos();
            try
            {

                d.CrearParametro("@IdAlumno", entAlumno.IdAlumno, SqlDbType.Int);
                d.EjecutaSentencia("InsertarInscripcion");

            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public void Pagar(EntMensualidad entMensualidad, EntUsuarioSist entUsuarioSist, decimal Beca)
        {
            AccesoaDatos d = new AccesoaDatos();
            try
            {

               
                d.CrearParametro("@BecaPag", Beca, SqlDbType.VarChar);
                d.CrearParametro("@RecargoPag", entMensualidad.Recargo, SqlDbType.VarChar);
                d.CrearParametro("@MontoPag", entMensualidad.Monto2, SqlDbType.VarChar);
                d.CrearParametro("@PagoOportunoPag", entMensualidad.PagoOportuno, SqlDbType.VarChar);

                d.CrearParametro("@IdMensualidad", entMensualidad.IdMensualidad, SqlDbType.Int);
                d.CrearParametro("@NombreCobrador", entUsuarioSist.Nombre, SqlDbType.VarChar);
                d.CrearParametro("@PagoTotalRealizado", entMensualidad.CantidadAPagar, SqlDbType.Money);
                



                d.EjecutaSentencia("PagarMensualidad");
            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }
    }
}